home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / amos / eaissu3b.lha / Source_Code / VS_Disk_Formatter.AMOS / VS_Disk_Formatter.amosSourceCode < prev   
AMOS Source Code  |  1995-12-30  |  6KB  |  302 lines

  1. Rem**WARNING THIS PROGRAM FORMATS A DISK** 
  2. Rem**DO NOT RUN UNTIL YOU HAVE A DISK YOU WANT FORMATTED IN DF0:** 
  3. '
  4. 'ripped from Amos_copy 
  5. '
  6. Dim UPP(79),LOW(79)
  7. If Length(7)=0 Then Reserve As Chip Data 7,1024
  8. Global UPP(),LOW()
  9. Global SOURCE,TARGET,VERIFY
  10. Global ABORT,UPP,LOW,_DOIT
  11. Global XUPP,YUPP,XLOW,YLOW,UPPSIDE,LOWSIDE
  12. SOURCE=0 : TARGET=1 : VERIFY=1 : OPTION=1 : UPPSIDE=1 : LOWSIDE=1
  13. For I=0 To 79
  14.   UPP(I)=1
  15.   LOW(I)=1
  16. Next I
  17. TARGET=0
  18. '  
  19. '**** Format ****  
  20. O2:
  21.   _TRACK[1]
  22.   _TRACKBLOCK[0,-1]
  23. Return 
  24. '
  25. '
  26. Procedure _TRACKBLOCK[BLOCK,COMMAND]
  27.   '
  28.   '**** Variablen & Adressen definieren **** 
  29.   DISKREP$=Space$(40)+Chr$(0)
  30.   DEVNAME$="trackdisk.device"+Chr$(0)
  31.   IOREQ$=Space$(80)+Chr$(0)
  32.   DISKREP=Varptr(DISKREP$)
  33.   IOREQADR=Varptr(IOREQ$)
  34.   '
  35.   '**** BootBlock erstellen **** 
  36.   If COMMAND=-1
  37.     COMMAND=3
  38.     For I=0 To 1023
  39.       Poke Start(7)+I,0
  40.     Next I
  41.     For I=0 To 12
  42.       Read N
  43.       Loke Start(7)+I*4,N
  44.     Next I
  45.   End If 
  46.   '
  47.   '**** Eigene Taskadresse suchen **** 
  48.   Areg(0)=0
  49.   Areg(1)=0
  50.   Dreg(0)=0
  51.   Dreg(1)=0
  52.   XFINDTASK=Execall(-294)
  53.   Loke DISKREP+$10,XFINDTASK
  54.   '
  55.   '**** Device ï¿½ffnen **** 
  56.   Areg(0)=Varptr(DEVNAME$)
  57.   Areg(1)=IOREQADR
  58.   Dreg(0)=TARGET
  59.   Dreg(1)=0
  60.   XOPENDEVICE=Execall(-444)
  61.   '
  62.   '**** Devicekommando ausf�hren ****
  63.   Loke IOREQADR+14,DISKREP
  64.   Doke IOREQADR+28,COMMAND
  65.   Loke IOREQADR+40,Start(7)
  66.   Loke IOREQADR+36,1024
  67.   Loke IOREQADR+44,BLOCK*512
  68.   XDOIO=Execall(-456)
  69.   '
  70.   '**** UPDATE[4] falls COMMAND=WRITE[3] ****
  71.   If COMMAND=3
  72.     Doke IOREQADR+28,4
  73.     XDOIO=Execall(-456)
  74.   End If 
  75.   '
  76.   '**** Motor ausschalten **** 
  77.   Doke IOREQADR+28,9
  78.   Loke IOREQADR+36,0
  79.   XDOIO=Execall(-456)
  80.   '
  81.   '**** Device schlie�en ****
  82.   XCLOSEDEVICE=Execall(-450)
  83.   '
  84.   '**** BootBlockDaten ****  
  85.   Data $444F5300,$C0200F19,$370,$43FA0018,$4EAEFFA0,$4A80670A
  86.   Data $20402068,$167000,$4E7570FF,$60FA646F,$732E6C69,$62726172,$79000000
  87. End Proc
  88. Procedure _RASTER[TRACK,XDOIO]
  89.   N=TRACK mod 2
  90.   If XDOIO
  91.     Ink 2
  92.     Add XDOIO,-19
  93.     If XDOIO>8
  94.       If XDOIO=9 : N$="Disk is write protected !" : End If 
  95.       If XDOIO=10 : N$="No disk in drive !" : End If 
  96.       _MESSAGE[N$]
  97.       ABORT=True
  98.       Pop Proc
  99.     End If 
  100.   End If 
  101.   If N=0
  102.     Text 84+XUPP*10,66+YUPP*11,Str$(XDOIO)-" "
  103.   Else 
  104.     Text 202+XLOW*10,66+YLOW*11,Str$(XDOIO)-" "
  105.   End If 
  106. End Proc
  107. Procedure _TRACK[N]
  108.   '
  109.   Reserve As Chip Data 2,5632
  110.   '
  111.   '**** Variablen & Adressen definieren **** 
  112.   DISKREP$=Space$(40)+Chr$(0)
  113.   DEVNAME$="trackdisk.device"+Chr$(0)
  114.   IOREQ$=Space$(80)+Chr$(0)
  115.   DISKREP=Varptr(DISKREP$)
  116.   IOREQADR=Varptr(IOREQ$)
  117.   '
  118.   '**** Eigene Taskadresse suchen **** 
  119.   Areg(0)=0
  120.   Areg(1)=0
  121.   Dreg(0)=0
  122.   Dreg(1)=0
  123.   XFINDTASK=Execall(-294)
  124.   Loke DISKREP+$10,XFINDTASK
  125.   '
  126.   '**** Device ï¿½ffnen **** 
  127.   Areg(0)=Varptr(DEVNAME$)
  128.   Areg(1)=IOREQADR
  129.   Dreg(0)=TARGET
  130.   Dreg(1)=0
  131.   XOPENDEVICE=Execall(-444)
  132.   '
  133.   '**** Befehl aufrufen **** 
  134.   Loke IOREQADR+14,DISKREP
  135.   Loke IOREQADR+40,Start(2)
  136.   Loke IOREQADR+36,5632
  137.   Ink 1,0
  138.   On N Gosub _FORMAT,_QFORMAT,_ERASE,_TEST
  139.   '
  140.   '**** Motor ausschalten **** 
  141.   Doke IOREQADR+28,9
  142.   Loke IOREQADR+36,0
  143.   XDOIO=Execall(-456)
  144.   '
  145.   '**** Device schlie�en ****
  146.   XCLOSEDEVICE=Execall(-450)
  147.   '
  148.   Erase 2
  149.   '
  150.   Pop Proc
  151.   '
  152.   '**** Track formattieren ****
  153. _FORMAT:
  154.   Doke IOREQADR+28,11
  155.   UL=-1
  156.   For TRACK=0 To 159
  157.     Add UL,1,0 To 1
  158.     _BAMCHECK[UL]
  159.     If _DOIT
  160.       Loke IOREQADR+44,TRACK*5632
  161.       XDOIO=Execall(-456)
  162.       _RASTER[TRACK,XDOIO]
  163.       '
  164.       '**** Verify ****
  165.       If VERIFY and ABORT=0
  166.         Doke IOREQADR+28,2
  167.         XDOIO=Execall(-456)
  168.         _VERIFY[TRACK,XDOIO]
  169.         Doke IOREQADR+28,11
  170.         Ink 1
  171.       End If 
  172.     End If 
  173.     '
  174.     '**** Abbruch ? **** 
  175.     If Mouse Key<>0
  176.       _ABORT
  177.     End If 
  178.     If ABORT : TRACK=159 : ABORT=0 : End If 
  179.     '
  180.   Next TRACK
  181.   Gosub _QFORMAT
  182. Return 
  183. '
  184. _QFORMAT:
  185.   Doke IOREQADR+28,11
  186.   N=Start(2)
  187.   For I=$204 To $2DF
  188.     Poke N+I,$FF
  189.   Next I
  190.   Doke N+2,$2
  191.   Poke N+15,$48
  192.   Loke N+20,$A661AEF3
  193.   Doke N+$13A,$1
  194.   Doke N+$13E,$371
  195.   Poke N+$1B0,$5
  196.   Poke N+$1B1,$45
  197.   Poke N+$1B2,$4D
  198.   Poke N+$1B3,$50
  199.   Poke N+$1B4,$54
  200.   Poke N+$1B5,$59
  201.   Poke N+$1FF,$1
  202.   Loke N+$200,$C000C037
  203.   Poke N+$272,$3F
  204.   Poke N+$2DC,$3F
  205.   Loke IOREQADR+44,$6E000
  206.   XDOIO=Execall(-456)
  207. Return 
  208. '
  209. _ERASE:
  210.   Doke IOREQADR+28,17
  211.   UL=-1
  212.   For TRACK=0 To 159
  213.     Add UL,1,0 To 1
  214.     _BAMCHECK[UL]
  215.     If _DOIT
  216.       Loke IOREQADR+44,TRACK
  217.       XDOIO=Execall(-456)
  218.       _RASTER[TRACK,XDOIO]
  219.     End If 
  220.     '
  221.     '**** Abbruch ? **** 
  222.     If Mouse Key<>0
  223.       _ABORT
  224.     End If 
  225.     If ABORT : TRACK=159 : ABORT=0 : End If 
  226.     '
  227.   Next TRACK
  228. Return 
  229.   '
  230.   '**** Track testen ****
  231. _TEST:
  232.   Doke IOREQADR+28,2
  233.   UL=-1
  234.   For TRACK=0 To 159
  235.     Add UL,1,0 To 1
  236.     _BAMCHECK[UL]
  237.     If _DOIT
  238.       Loke IOREQADR+44,TRACK*5632
  239.       XDOIO=Execall(-456)
  240.       Ink 1
  241.       _RASTER[TRACK,XDOIO]
  242.     End If 
  243.     '
  244.     '**** Abbruch ? **** 
  245.     If Mouse Key<>0
  246.       _ABORT
  247.     End If 
  248.     If ABORT : TRACK=159 : ABORT=0 : End If 
  249.     '
  250.   Next TRACK
  251. Return 
  252. '
  253. End Proc
  254. Procedure _MESSAGE[N$]
  255.   Ink 0,0 : Bar 14,189 To 301,198
  256.   Ink 2 : Text 14,196,N$
  257. End Proc
  258. Procedure _BAMCHECK[UL]
  259.   If UL=0
  260.     Add XUPP,1
  261.     If XUPP=10
  262.       Add YUPP,1 : XUPP=0
  263.     End If 
  264.     If UPP(UPP) and UPPSIDE : _DOIT=True Else _DOIT=False : End If 
  265.     Inc UPP
  266.   Else 
  267.     If LOW(LOW) and LOWSIDE : _DOIT=True Else _DOIT=False : End If 
  268.     Inc LOW
  269.     Add XLOW,1
  270.     If XLOW=10
  271.       Add YLOW,1 : XLOW=0
  272.     End If 
  273.   End If 
  274. End Proc
  275. Procedure _VERIFY[TRACK,XDOIO]
  276.   If XDOIO=0 Then Pop Proc
  277.   N=TRACK mod 2
  278.   Add XDOIO,-19
  279.   _MESSAGE["Verify error ! ï¿½ ESC=Abort process ï¿½"]
  280.   If N=0
  281.     Text 84+XUPP*10,66+YUPP*11,Str$(XDOIO)-" "
  282.   Else 
  283.     Text 202+XLOW*10,66+YLOW*11,Str$(XDOIO)-" "
  284.   End If 
  285.   Repeat : N2=Asc(Inkey$) : Until N2
  286.   _MESSAGE[""]
  287.   If N2=27 Then ABORT=True
  288. End Proc
  289. Procedure _ABORT
  290.   XM=X Screen(X Mouse)
  291.   YM=Y Screen(Y Mouse)
  292.   If XM>40 and XM<72 and YM>134 and YM<146
  293.     G[41,135,71,145,1]
  294.     ABORT=True
  295.     Wait 5
  296.     G[41,135,71,145,0]
  297.   End If 
  298. End Proc
  299. Procedure G[X,Y,X2,Y2,S]
  300.   If S Then C1=2 : C2=1 Else C1=1 : C2=2
  301.   Ink C1 : Draw X,Y To X2-1,Y : Draw X,Y To X,Y2 : Ink C2 : Draw X+1,Y2 To X2,Y2 : Draw X2,Y To X2,Y2 : Ink 1,0
  302. End Proc